package ma.ac.onousc.gestionfi.budget.services;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.Remote;

import ma.ac.onousc.gestionfi.budget.model.Etablissement;
import ma.ac.onousc.gestionfi.budget.model.Personnel;
import ma.ac.onousc.gestionfi.budget.model.ProgrammeEmploi;
import ma.ac.onousc.gestionfi.budget.model.Rubrique;
import ma.ac.onousc.gestionfi.budget.model.RubriqueBudgetaire;
import ma.ac.onousc.gestionfi.budget.model.Soumettre;
import ma.ac.onousc.gestionfi.budget.model.TypeBudget;
import ma.ac.onousc.gestionfi.budget.model.Ville;

import org.primefaces.model.TreeNode;

@Remote
public interface BudgetManager {

	public Personnel authentifier(String login, String pwd);

	public RubriqueBudgetaire findByEtabAndAnneeAndRubrique(ProgrammeEmploi annee,
			Etablissement etablissement, Rubrique rubrique);

	public List<TypeBudget> findAllTypeBudget();

	public TypeBudget findTypeBudgetByID(int idTypeBudget);

	public Rubrique makePersistent(Rubrique rubrique);

	public List<Rubrique> findAllRubrique();

	public List<Rubrique> findRubriqueByTypeBudget(int typeBudget);

	public TypeBudget findTypeBudgetByIntitule(String intitule);

	public List<ProgrammeEmploi> findAllProgrammeEmploi();

	public ProgrammeEmploi makePersistent(ProgrammeEmploi programmeEmploi);

	public List<Personnel> findAllPersonnel();

	public List<Etablissement> findAllEtablissement();

	public Map<Integer, String> findRubriquesWithChildren(TypeBudget typeBudget);

	public List<RubriqueBudgetaire> findAllRubriqueBudgetaire();

	public List<RubriqueBudgetaire> findRubriqueBudgetaireByTypeBudgetAndAnnee(
			TypeBudget typeBudget, ProgrammeEmploi pe);

	public Etablissement findEtablissementSiege();

	public Ville makePersistent(Ville ville);

	public List<Object> findRubriqueBudgetaireByEtabAnnee(
			Integer idEtablissement, int annee, int idTypeBudget);

	public List<Integer> findAnnee();

	public List<Etablissement> findEtablissementCUs();

	public List<Etablissement> findAllEtablissementNonSoumis(
			ProgrammeEmploi programmeEmploi);

	public Etablissement findEtablissementByID(int idEtablissement);

	public RubriqueBudgetaire makePersistent(
			RubriqueBudgetaire rubriqueBudgetaire);

	public ProgrammeEmploi findProgrammeEmploiByAnneeAndTypeBudget(int annee,
			TypeBudget tb);

	public void parcourirArbreRubriqueBudgetaire(TreeNode arbre);

	public HashMap<Integer, BigDecimal> findSUMRubriqueBudgetaireByTypeBudgetAndAnnee(
			TypeBudget typeBudget, ProgrammeEmploi pe);

	public List<RubriqueBudgetaire> findRubriquesBudgetaireByProgrammeEmploiAndEtablissement(
			ProgrammeEmploi programmeEmploi, Etablissement etablissement);

	public ProgrammeEmploi findByIdPro(int id);

	public List<Personnel> findByEtab(int id);

	public List<ProgrammeEmploi> findAllFonc();

	public Soumettre makePersistent(Soumettre rapportASoumettre);

	public Personnel findPersonnelByID(int id);

	public boolean isBudgetSoumis(Etablissement etablissement,
			ProgrammeEmploi programmeEmploi);

	public boolean isProgrammeEmploiCloture(ProgrammeEmploi programmeEmploi);

	public int findAnneeMax();
	
	public Personnel makePersistent(Personnel eng);
	public void makeTransient(Personnel eng);
	
	public Personnel findPersonnelById(int id);
	
	public Personnel findPersonnelByLogin(String login);

}
